# 变量
# 定义变量不需要指定类型，只需要取一个变量名即可
# 定义的时候就需要赋值（定义即赋值） # java：int a;
# 例如：定义了一个变量score,它的值是100
score = 100
score = 99
score = 60

# 变量的命名规则
# 不能以关键字命名(保留字)、只能是大小写字母、数字、下划线_，不能以数字开头
# for、if、else、while、try......
# 查看Python中的关键字
import keyword

print(keyword.kwlist)

bianliang1 = 1
_bianliang2 = 2
bian_liang3 = 3
bian_4liang = 4
# 5bianliang = 5 # 不能以数字开头

print("*" * 30)

# 注释
# 单行注释：以#号开头，表示单行注释，相当于Java中的 //

# 多行注释一般用于文档说明
""" 成对的三个双引号：多行注释 相当于Java中的 /*  */
多行注释
这是一行注释
这是一行注释
这是一行注释
这是一行注释
"""
'''成对的三个单引号：多行注释
多行注释
这是一行注释
这是一行注释
这是一行注释
这是一行注释
'''
print("*" * 30)
# print函数：可以传入多个元素，将元素打印到控制台
# 主要有两个常用的参数：end、sep
# end:换行符，默认是\n
# sep:每个元素之间的分割符，默认是一个空格
# 按住ctrl键，用鼠标左键点击函数名即可进入函数对应的源码，查看文档说明
print("helloWorld", end=" ")

# 1 2 3 4 5
print(1, 2, 3, 4, 5, end=" ")
# 1|2|3|4|5
print(1, 2, 3, 4, 5, sep="|")
print("*" * 30)
# 数据类型
# 虽然Python是一门动态数据类型的编程语言（会根据赋予的值，动态地判断变量的类型）
# 但是在Python中同样也有数据类型的概念
# 五大基本数据类型：整型int、浮点float、字符串str、布尔bool、空类型NoneType

# 整型int（整数），不像Java中会按长度分为：byte、short、int、long，在Python中统一为int
int1 = 1
# 可以通过type查看变量的类型
print(type(int1), int1)

# 浮点float（小数），不像Java中按照精度分为：float、double，在Python中统一为float
float1 = 1.1111
print(type(float1), float1)

# 字符串str：在Python中没有像Java中的char字符的类型，
# 不管是一个字符还是一串字符，不管是用单引号还是双引号括起来的，在Python中统一为字符串
str1 = 'a'
print(type(str1), str1)
str2 = "a"
print(type(str2), str2)
str3 = "abc"
print(type(str3), str3)
str4 = 'abc'
print(type(str4), str4)

# 布尔bool，跟Java类似，不是True就是False
# 注意Java中是true、false（小写的），Python中的True、False（首字母大写）
bool1 = True
bool2 = False
print(type(bool1), bool1)
print(type(bool2), bool2)

# 空类型NoneType，相当于Java中的null
none1 = None
print(type(none1), none1)
print("*" * 30)
# 算术运算符
# +、-、*、/、**、//、%
a = 3
b = 10
print(a + b)  # 13
print(a - b)  # -7
print(a * b)  # 30
print(a / b)  # 0.3

print(b ** a)  # 1000 b的a次方：10的3次方=1000
print(b // a)  # 3 向下取整（直接舍弃小数位，保留整数位，不是四舍五入）
print(10 // 4)  # 2
print(b % a)  # 1 取余数
print(10 % 4)  # 2

print(2 ** 3 ** 2)  # 512: 2的9次方 ** 从后往前算
print(10 // 3 // 2)  # 1： 10//3=3 3//2=1 // 从前往后算

bool3 = False
bool4 = True
print(not bool3)  # 取反
print(bool3 & bool4)  # 与
print(bool3 and bool4)  # 与
print(bool3 | bool4)  # 或
print(bool3 or bool4)  # 或
print(bool3 ^ bool4)  # 异或
print("*" * 30)

# 类型转换
# int to str
int1 = 10
print(type(int1), int1)
int2str = str(int1)
print(type(int2str), int2str)

# float to str
float1 = 1.111
float2str = str(float1)
print(type(float2str), float2str)

# str to int
str1 = "12345" # 0713:123 0714:1234 0715:12345
print(type(str1), str1)
str2int = int(str1)
print(type(str2int), str2int)

# str to float
str2 = "123.123"
print(type(str2), str2)
str2float = float(str2)
print(type(str2float), str2float)

# 注意str to int的时候一定要符合规范
str3 = 'abcd'
# int(str3) # 不是所有字符串都能转成int类型

# int、float、str to bool：除零、空字符串以外都是True
# int to bool：除零以外都是True
print(bool(0))  # False
print(bool(1))  # True
print(bool(10))  # True
print(bool(-0))  # False
print(bool(-1))  # True
# float to bool：除零以外都是True
print(bool(0.0))  # False
print(bool(0.111))  # True
print(bool(1.111))  # True
print(bool(-1.11))  # True

# str to bool：除空字符串以外都是True
print(bool("abcdefg"))  # True
print(bool("True"))  # True
print(bool("False"))  # True
print(bool(""))  # False

print("xxx")